题解 CF1360B@洛谷 | 1360B@Codeforces 【Honest Coach】

这题有点复杂,简化一下问题。

把这些数分为两组,要求一组的最大值与另一组的最小值的差尽量小。

所以我们可以知道,若 aia_iaja_j 差最小,则把比 aia_i 小的分一组,比 aja_j 大的分一组即可。

为了优化时间,提前排个序即可。

代码:

//By: Luogu@rui_er(122461)
#include <bits/stdc++.h>
using namespace std;

int T, n, a[51];

int main() {
	scanf("%d", &T);
	while(T--) {
		scanf("%d", &n);
		for(int i=1;i<=n;i++) {
			scanf("%d", &a[i]);
		}
		sort(a+1, a+1+n);
		int mi = 0x3f3f3f3f;
		for(int i=2;i<=n;i++) {
			mi = min(mi, a[i]-a[i-1]);
		}
		printf("%d\n", mi);
	}
	return 0;
}